887b59
@@ -149,7 +149,13 @@
public ExprInfo addOrGetExprInfo(ExprNodeDesc expr) {
   }
 
   public void addFinalCandidate(String alias, ExprNodeDesc expr) {
-    getPushdownPreds(alias).add(expr);
+    List<ExprNodeDesc> predicates = getPushdownPreds(alias);
+    for (ExprNodeDesc curPred: predicates) {
+      if (curPred.isSame(expr)) {
+        return;
+      }
+    }
+    predicates.add(expr);
   }
 
   /**
@@ -159,7 +165,20 @@
public void addFinalCandidate(String alias, ExprNodeDesc expr) {
    * @param pushDowns
    */
   public void addPushDowns(String alias, List<ExprNodeDesc> pushDowns) {
-    getPushdownPreds(alias).addAll(pushDowns);
+    List<ExprNodeDesc> predicates = getPushdownPreds(alias);
+    boolean isNew;
+    for (ExprNodeDesc newPred: pushDowns) {
+      isNew = true;
+      for (ExprNodeDesc curPred: predicates) {
+        if (curPred.isSame(newPred)) {
+          isNew = false;
+          break;
+        }
+      }
+      if (isNew) {
+        predicates.add(newPred);
+      }
+    }
   }
 
   /**
